#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <map>
#include<vector>
#include <algorithm>
//using namespace std;
//const int N = 2e4 + 10;
//int q[N];
//void solve()
//{
//	int n;
//	cin >> n;
//	map<int, int> m;
//	vector<int> ans;
//	int len = ((n - 1) * n) / 2;
//	int ma = -2e9;
//	for (int i = 0; i < len; i++)
//	{
//		cin >> q[i];
//		m[q[i]] ++;
//		ma = max(ma, q[i]);
//	}
//	sort(q, q + len);
//	int sz = n;
//	int cnt = n;
//	for (auto p : m)
//	{
//		cnt++;
//	}
//	for (auto p : m)
//	{
//		int k = ceil((double)p.second / sz);
//		for (int i = 0; i < k; i++)
//		{
//			ans.push_back(p.first);
//			sz--;
//		}
//	}
//
//	while (sz--)
//	{
//		ans.push_back(ma);
//	}
//	for (auto a : ans)
//		cout << a << ' ';
//	cout << endl;
//}
//int main()
//{
//	int t;
//	cin >> t;
//	while (t--)
//		solve();
//	return 0;
//}
using namespace std;
const int N = 1e5 + 10;
int s[N];
int cnt;
bool st[N];
int c[N];
bool ju[N];
vector<int> p[N];
void prime()
{
	cnt = 0;
	for (int i = 2; i <= N; i++)
	{
		if (!st[i]) s[cnt++] = i;
		for (int j = 0; s[j] <= N / i; j++)
		{
			st[s[j] * i] = true;
			if (i % s[j] == 0) break;
		}
	}
}
void solve()
{
	memset(ju, false, sizeof ju);
	// int n;
	// cin>>n;
	// int ans = 0;
	// int i;
	// if(n <= 3)
	// {
	// 	cout<<"0\n";
	// 	return;
	// }
	// for(i = 0;i <= n;i ++)
	// {
	// 	ans += n / i / 2;
	// 	c[i] = n / i >> 1 << 1;
	// }

	// cout<<ans;
	// for(int j = 0;j < i;j ++)
	// {
	// 	for(int t = 1;t <= c[j];t ++)
	// 			cout<<' '<<t * s[j];
	// }
	// cout<<endl;
	int n;
	cin >> n;
	int ans = 0;
	if (n <= 3)
	{
		cout << 0 << endl;
		return;
	}
	for (int i = n; i >= 2; i--)
	{
		if (st[i]) continue;
		int x = 1, y = 0;
		//
		ju[i] = true;
		for (int j = i * 2; j <= n; j += i)
			if (!ju[j]) x++;
		if (x & 1)
			y = 3 * i;
		else y = 2 * i;
		p[i].push_back(i);
		if (x > 1)
			ans++;
		for (int j = y; j <= n; j += i)
			if (!ju[i])
			{
				p[i].push_back(j);
				ju[j] = true;
				ans++;
			}
	}
	cout << ans / 2;
	for (int i = 2; i <= n; i++)
	{
		if (p[i].size() <= 1) continue;
		for (int j = 0; j < p[i].size(); j += 2)
			cout << ' ' << p[i][j] << ' ' << p[i][j + 1];
	}
	cout << endl;
	for (int i = 2; i <= n; i++)
		p[i].clear();
}

int main()
{
	prime();
	int t;
	cin >> t;
	while (t--)
		solve();
	return 0;
}
